package org.example.basic.lambda.collectors;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * FlatMapping 案例 （jdk 1.9）
 * 在Java 9中，向Collectors类添加了一个新方法：flatMapping()。
 * 它类似于Collectors.mapping()方法，其中flatMapping()方法允许我们处理嵌套的集合。
 * Collectors.flatMapping()方法需要的功能将被施加到输入元件和集电极积累通过功能传递的元件。
 * 与Collectors.mapping()方法不同，Collectors.flatMapping()方法处理的元素流使我们能够摆脱不必要的中介集合。
 *
 * @author songyafei
 */
public class FlatMappingTest {

    public static void main(String[] args) {

        Stream<List<Integer>> listStream = Stream.of(List.of(1, 2, 3, 4, 5, 6), List.of(7, 8, 9, 10));
        Map map = listStream.collect(Collectors.groupingBy(
                Collection::size,
                Collectors.flatMapping(
                        l -> l.stream()
                                .filter(i -> i % 2 == 0), Collectors.toList())
                )
        );
        map.forEach((k, v) -> System.out.println("k = " + k + ",v=" + v));



    }
}
